package controlador.buzones;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * Interfaz a implementar por los buzones.
 * @author Globex Inc.
 *
 */
public interface BuzonIface extends Remote {

	/**
	 * Agrega un mensaje al buz&oacute;n.
	 * @param msj Mensaje a encolar.
	 * @return true si se ha agregado correctamente. En caso cotrario devuelve false.
	 * @throws RemoteException
	 */
	public boolean encolar(Mensaje msj) throws RemoteException;
	
	/**
	 * Obtiene el primer mensaje disponible en la cola de mensajes.
	 * Elimina dicho mensaje de la cola.
	 * @return El primer mensaje disponible en en la cola.
	 * @throws RemoteException
	 */
	public Mensaje desencolar() throws RemoteException;
	
	/**
	 * Comprueba si hay mensajes en el buz&oacute;n.
	 * @return true si el buz&oacute;n est&aacute; vac&iacute;o. En caso contrario devuelve false.
	 * @throws RemoteException
	 */
	public boolean isEmpty() throws RemoteException;
	
	/**
	 * Eliminina todos los mensajes del buz&oacute;n.
	 * @throws RemoteException
	 */
	public void vaciar() throws RemoteException;
	
	/**
	 * Publica en buz&oacute;n como un objeto RMI.
	 * @param port Puerto donde se publica.
	 * @param id Ruta de la URL donde se publica
	 * @return true si se ha publicado correctamente. En caso contrario devuelve false.
	 * @throws RemoteException
	 */
	public boolean registrar(int port, String id) throws RemoteException;
}
